<?php
namespace SimplePhp\Dispatcher;
use SimplePhp\System as system;

/**
 * 执行controller
 *
 * controller要进行并行化处理
 * 比如简单的拷贝到其他服务器然后通过
 * 注解配置本地的Controller指向其他服务器的controller
 * （本身controller要是一个rpc分布式协议的controller）
 * 通过这样来实现分布式调用
 * 而且注解需要进行缓存来达到最好的效率
 * 减少io操作
 */
class ExecController implements IExec {
	use system\TInject;

	/**
	 * @Inject[di=IDispatch]
	 * @var [type]
	 */
	protected $IDispatch; //可以用注入的方式注入不同的类来实现不同的跳转

	private function Sacnner() {
		$controller = new ControllerNodeScanner();
		return $DispatcherMap = $controller->Scanner();
	}
	public function exec() {
		$C = $this->IDispatch->getDispatchController();
		$M = $this->IDispatch->getDispatchResponse();
		$DispatcherMap = $this->Sacnner();
		$ControllerList = array_keys($DispatcherMap);
		if (in_array($C, $ControllerList)) {
			$method = $DispatcherMap[$C];
			$methodList = array_keys($method);
			if (in_array($M, $methodList)) {
				$page = $method[$M];
				//分析函数参数 然后吧get和post的数据映射到这里面
				$args = Request::mapParameters($page);
				var_dump($args);
				$result = null;
				if (!$args) {
					$result = $page->invoke($method[0]->newInstance());
				} else {
					$result = $page->invokeArgs($method[0]->newInstance(), $args);
				}
			}
		}
	}
}